"""
addTimeTenure.py
"""

import os
import sys
import multiprocessing
import datetime
import traceback
import math
import collections
import wp_datetime as dtime

def main():

	# The number of worker processes the worker pool will use to process the work queue.
	# Recommend setting this to half the number of available cores to avoid hogging resources.
	# That would be 24 cores on platinum.
	# Once you get above a certain level of CPU usage, I/O throughput will bottleneck anyway.
	NUM_WORKERS = 24
	
	# The number of translation tasks given to each process at a time.
	# Recommend this setting to be 1 for maximum throughput.
	# If I/O throughput ever becomes an issue, increasing this value will make non-CPU bound tasks run more efficiently.
	TASK_PARTITION_SIZE = 1
	
	inputDir = sys.argv[1]
	outputDir = sys.argv[2]

	inputFileList = os.listdir(inputDir)

	filePathArgs = []
	
	for inputFileName in inputFileList:
		
		inputFilePath = inputDir+'/'+inputFileName
		outputFilePath = outputDir+'/'+inputFileName
		
		if os.path.isfile(inputFilePath):
			filePathArgs.append( (inputFilePath, outputFilePath) )

	workerPool = multiprocessing.Pool(NUM_WORKERS)
	workerPool.map_async(processFile, filePathArgs, TASK_PARTITION_SIZE)	
	workerPool.close()
	workerPool.join()


			
def processFile(filePathArgs):
	
	try:
		inputFilePath = filePathArgs[0]
		outputFilePath = filePathArgs[1]

		print timestamp() + " Starting processing for " + inputFilePath + " to " + outputFilePath

		inputFileHandle = open(inputFilePath,"r")
		outputFileHandle = open(outputFilePath, 'a+')

		translate(inputFileHandle, outputFileHandle)
	
		inputFileHandle.close()
		outputFileHandle.close()

		print timestamp() + " Finished processing for " + inputFilePath + " in " + outputFilePath
	
	except:
		traceback.print_exc(limit=3, file=sys.stdout)
		sys.stdout.flush()


def translate(inputFileHandle, outputFileHandle):

	# Number of seconds we will consider to be the interval between two distinct editing sessions
	SESSION_THRESHOLD = 3600

	IGNORE_REVERTS = True
	IGNORE_REVERTED = True

	lastFields = None
	nextFields = None
	
	firstUser = True

	editList = []

	for line in inputFileHandle:
		tokens = line.split('\t')

		if not firstUser:
			if username <> tokens[0]:
				print editList
				for line in editList:
					outputFileHandle.write(line + "\t" + offset + "\n")
				editList = []
		
		editList.append(line.replace("\n",""))
		offset = tokens[8]
		username = tokens[0]
		firstUser == False
	
	for line in editList:
		outputFileHandle.write(line + "\t" + offset + "\n")
		

def timestamp():
	return datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')

def timestampToDate(dateString):
	return datetime.datetime.strptime(dateString.strip(), '%Y-%m-%d %H:%M:%S')

def computeYear(dateString):
	return str(timestampToDate(dateString).year)

def computeOffsetYear(startYear, dateString):
	return str(int(computeYear(dateString)) - int(startYear))

def parseLine(line):

	tokens = line.split('\t')
	
	fields = {}

	fields['username'] = tokens[0]
	fields['timestamp'] = tokens[1]
	fields['namespace'] = tokens[2]
	fields['start'] = tokens[3]
	fields['end'] = tokens[4]
	
	
	return fields


if __name__ == '__main__':
	main()


	
